using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Helpers;
using TumbaloSoft.Models;
using System.Collections;
using TumbaloSoft.Helpers;
using TumbaloSoft.Helpers.QueryObjects;
using System.IO;


namespace TumbaloSoft.Controllers
{
    public class ContratoMantenimientoController : TumbaloController
    {
        //
        // GET: /Edificios/

        private static Object lockObject = new Object();

        public ActionResult Registrar()
        {
            
                if (defaultAction != null) return defaultAction;

                int cuenta=AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);//administrador=0, general=1
                
                int idedificio;
                IList listaEdificio;
                try
                {
                if (permiso == 2)
                {
                    idedificio = HelperAdministrador.EdificioAdministradoSelect(HelperAdministrador.selectByIdPersona(cuenta).prIdAdministrador);
                    ViewBag.edificio=HelperEdificio.selectByIdAll(idedificio);
                }
                if (permiso == 3)
                {
                    listaEdificio = HelperEdificio.selectAllEdificiosconAdministrador() ;
                    ViewBag.lista = listaEdificio;
                }

                ViewBag.permiso = permiso;
                //List<PersonaNatural> persona = new List<PersonaNatural>();
                IList proveedores = HelperProveedor.selectAllActivo();
                //IList listaEmpleado = HelperVendedor.selectAll();
                IList listaMoneda = HelperMoneda.selectAll();
                List<Proveedor> provFinal = new List<Proveedor>();


                if (proveedores != null)
                {
                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorNatural = HelperPersonaNatural.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorNatural.prNombre != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 0;
                            provFinal.Add(prov);
                        }
                    }

                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorJuridico = HelperPersonaJuridica.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorJuridico.prRazonSocial != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 1;
                            provFinal.Add(prov);
                        }
                    }
                }
               
                
                //ViewBag.lista = listaEdificio;

                ViewBag.listaProveedor = provFinal;
                ViewBag.listaMoneda = listaMoneda;
                ViewBag.tipo = 0;
            }
            catch
            {
                Logger.Current.Error("Hubo un error al registrar los contratos");
                return View("~/Views/Shared/Error.cshtml");
            }
            return View();
        }

        [HttpPost]
        public ActionResult Registrar(ContratoMantenimiento contrato)
        {
            
                if (defaultAction != null) return defaultAction;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);//administrador=0, general=1

                ViewBag.permiso = permiso;

                int idedificio;
                IList listaEdificio;
                try
                {
                if (permiso == 2)
                {
                    idedificio = HelperAdministrador.EdificioAdministradoSelect(HelperAdministrador.selectByIdPersona(cuenta).prIdAdministrador);
                    ViewBag.edificio = HelperEdificio.selectByIdAll(idedificio);
                }
                if (permiso == 3)
                {
                    listaEdificio = HelperEdificio.selectAllEdificiosconAdministrador();
                    ViewBag.lista = listaEdificio;
                }

                ViewBag.permiso = permiso;
                IList proveedores = HelperProveedor.selectAllActivo();
                
                IList listaMoneda = HelperMoneda.selectAll();
                List<Proveedor> provFinal = new List<Proveedor>();


                if (proveedores != null)
                {
                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorNatural = HelperPersonaNatural.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorNatural.prNombre != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 0;
                            provFinal.Add(prov);
                        }
                    }

                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorJuridico = HelperPersonaJuridica.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorJuridico.prRazonSocial != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 1;
                            provFinal.Add(prov);
                        }
                    }
                }

                                                
                ViewBag.listaProveedor = provFinal;
                ViewBag.listaMoneda = listaMoneda;
                ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                
                AdministradorEdificios administrador;           
                if (contrato.prEdificio!=null){
                    
                    int idadmin=HelperAdministrador.buscaAdministradorEdificio(contrato.prEdificio.prIdEdificio);
                    administrador = HelperAdministrador.selectById(idadmin);
                    contrato.prAdministrador = administrador;
                }

                //contrato.prIdEmpleado=HelperAdministrador.
                
            }
            catch
            {
                Logger.Current.Error("Hubo un error al registrar los contratos");
                return View("~/Views/Shared/Error.cshtml");
            }
            //al no recibir el codigo en el post hay que eliminar el error ya que se calcula automaticamente
            ModelState.Remove("prIdContratoMantenimiento");
            ModelState.Remove("prEdificio.prDireccion");
            ModelState.Remove("prEdificio.prNombre");
            ModelState.Remove("prEdificio.prNroPisos");
            ModelState.Remove("prEdificio.prArea");
            ModelState.Remove("prEdificio.prNroDepartamentos");
            ModelState.Remove("prEdificio.prMonto");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prSexo");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prCodigoDocumento");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prNombre");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prApellidoPaterno");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prApellidoMaterno");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prFechaNacimiento");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prDireccion");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prEmail");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prTelefono");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prTipoDocumento");
            ModelState.Remove("prIdProveedor.prProveedorNatural.prRuc");
            ModelState.Remove("prIdProveedor.prProveedorJuridico.prDireccion");
            ModelState.Remove("prIdProveedor.prProveedorJuridico.prEmail");
            ModelState.Remove("prIdProveedor.prProveedorJuridico.prTelefono");
            ModelState.Remove("prIdProveedor.prProveedorJuridico.prRuc");
            ModelState.Remove("prIdProveedor.prTelefono");
            ModelState.Remove("prIdProveedor.prDireccion");
            ModelState.Remove("prAdministrador.prSexo");
            ModelState.Remove("prAdministrador.prCodigoDocumento");
            ModelState.Remove("prAdministrador.prNombre");
            ModelState.Remove("prAdministrador.prApellidoPaterno");
            ModelState.Remove("prAdministrador.prApellidoMaterno");
            ModelState.Remove("prAdministrador.prFechaNacimiento");
            ModelState.Remove("prAdministrador.prDireccion");
            ModelState.Remove("prAdministrador.prEmail");
            ModelState.Remove("prAdministrador.prTelefono");
            ModelState.Remove("prAdministrador.prTipoDocumento");
            ModelState.Remove("prAdministrador.prPorcentajeBase");
            /*
            if (contrato.prDescripcion!=null && contrato.prDescripcion.Length > 255)
            {
                ModelState.AddModelError("prDescripcion", "La descripcion no debe llegar a mas de 255 caracteres");
            }*/

            if (contrato.prFechaFirma.CompareTo(contrato.prFechaInicio) > 0)
            {
                ModelState.AddModelError("prFechaFirma", "La fecha de firma debe ser menor que la fecha de inicio");
            }

            if (contrato.prFechaInicio.CompareTo(contrato.prFechaFin) > 0)
            {
                ModelState.AddModelError("prFechaInicio", "La fecha de inicio debe ser menor que la fecha de fin");
            }

            if (contrato.prTipoContrato.prIdTipoContrato==0 && (!contrato.prFrecuencia.HasValue || contrato.prFrecuencia.Value<=0))
            {
                ModelState.AddModelError("prFrecuencia", "Debe escribir una frecuencia mayor a 0");
            }

            if (contrato.prMonto != null && (!contrato.prMonto.HasValue || contrato.prMonto.Value <= 0))
            {
                ModelState.AddModelError("prMonto", "Debe escribir un monto mayor a 0");
            }

            //ViewBag.returnURL = "/ContratoMantenimiento/Index";

            if (ModelState.IsValid)
            {
                try
                {
                    
                    lock (lockObject)
                    {
                        contrato.prIdContratoMantenimiento = HelperContratoMantenimiento.selectMaxCodigo() + 1;
                        if (contrato.prDescripcion == null) contrato.prDescripcion = " ";
                        HelperContratoMantenimiento.insert(contrato);
                    }

                    ViewBag.mensaje = "Se creo correctamente el nuevo contrato ";
                    ViewBag.returnURL = "/ContratoMantenimiento/";
                    return View("~/Views/Shared/Exito.cshtml");                    
                }
                catch
                {
                    Logger.Current.Error("Hubo un error al insertar los contratos");
                    return View("~/Views/Shared/Error.cshtml");
                }
            }


            else return View(contrato);
        }
		
		
		public ActionResult Modificar(int? id)
        {
         
                if (defaultAction != null) return defaultAction;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);//administrador=0, general=1

                ViewBag.permiso = permiso;
                try
                {
                IList listaEdificios = HelperEdificio.selectAll();
                ViewBag.lista = listaEdificios;

                if (!id.HasValue) return HttpNotFound("Esta pagina no existe");//se llamo sin parametro deberia devolver error

                ContratoMantenimiento contrato = HelperContratoMantenimiento.selectById(id.Value);
                if (contrato == null) return HttpNotFound("No existe el contrato con el codigo " + id.Value);//si el edificio no se encontro//tambien deberia devolver error

                Edificio edif = HelperEdificio.selectByIdAll(contrato.prEdificio.prIdEdificio);
                ViewBag.nombre = edif.prNombre;
                ViewBag.fechaFirma = contrato.prFechaFirma.ToShortDateString();
                ViewBag.fechaInicio = contrato.prFechaInicio.ToShortDateString();
                ViewBag.fechaFin = contrato.prFechaFin.ToShortDateString();
                ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                contrato.prIdProveedor = HelperProveedor.selectById(contrato.prIdProveedor.prIdProveedor);
                contrato.prIdProveedor.prProveedorJuridico = HelperPersonaJuridica.selectById(contrato.prIdProveedor.prIdPersona);
                contrato.prIdProveedor.prProveedorNatural = HelperPersonaNatural.selectById(contrato.prIdProveedor.prIdPersona);

                if (contrato.prIdProveedor.prProveedorNatural.prNombre == null)
                {
                    contrato.prIdProveedor.prTipoEspecial = 1;
                }
                else
                {
                    contrato.prIdProveedor.prTipoEspecial = 0;
                }

                AdministradorEdificios admin = HelperAdministrador.selectById(contrato.prAdministrador.prIdAdministrador);
                //per.prIdPersona = contrato.prIdEmpleado.prIdVendedor;
                ViewBag.empleado = admin;

                return View(contrato);
            }
            catch
            {
                Logger.Current.Error("Hubo un error al mostar el modificar los contratos");
                return View("~/Views/Shared/Error.cshtml");
            }
            

        }

        [HttpPost]
        public ActionResult Modificar(ContratoMantenimiento contrato)
        {
            
                if (defaultAction != null) return defaultAction;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);//administrador=0, general=1

                ViewBag.permiso = permiso;
                try
                {
                IList listaEdificios = HelperEdificio.selectAll();
                ViewBag.lista = listaEdificios;

                ModelState.Remove("prEdificio.prDireccion");
                ModelState.Remove("prEdificio.prNombre");
                ModelState.Remove("prEdificio.prNroPisos");
                ModelState.Remove("prEdificio.prArea");
                ModelState.Remove("prEdificio.prNroDepartamentos");
                ModelState.Remove("prEdificio.prMonto");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prSexo");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prCodigoDocumento");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prNombre");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prApellidoPaterno");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prApellidoMaterno");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prFechaNacimiento");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prDireccion");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prEmail");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prTelefono");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prTipoDocumento");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prRuc");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prDireccion");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prEmail");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prTelefono");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prRuc");
                ModelState.Remove("prIdProveedor.prTelefono");
                ModelState.Remove("prIdProveedor.prDireccion");
                ModelState.Remove("prAdministrador.prSexo");
                ModelState.Remove("prAdministrador.prCodigoDocumento");
                ModelState.Remove("prAdministrador.prNombre");
                ModelState.Remove("prAdministrador.prApellidoPaterno");
                ModelState.Remove("prAdministrador.prApellidoMaterno");
                ModelState.Remove("prAdministrador.prFechaNacimiento");
                ModelState.Remove("prAdministrador.prDireccion");
                ModelState.Remove("prAdministrador.prEmail");
                ModelState.Remove("prAdministrador.prTelefono");
                ModelState.Remove("prAdministrador.prTipoDocumento");
                ModelState.Remove("prAdministrador.prPorcentajeBase");




                if (ModelState.IsValid)
                {
                    HelperContratoMantenimiento.update(contrato);
                    Edificio edif = HelperEdificio.selectByIdAll(contrato.prEdificio.prIdEdificio);
                    ViewBag.nombre = edif.prNombre;
                    ViewBag.fechaFirma = contrato.prFechaFirma.ToShortDateString();
                    ViewBag.fechaInicio = contrato.prFechaInicio.ToShortDateString();
                    ViewBag.fechaFin = contrato.prFechaFin.ToShortDateString();
                    ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                    contrato.prIdProveedor = HelperProveedor.selectById(contrato.prIdProveedor.prIdProveedor);
                    contrato.prIdProveedor.prProveedorJuridico = HelperPersonaJuridica.selectById(contrato.prIdProveedor.prIdPersona);
                    contrato.prIdProveedor.prProveedorNatural = HelperPersonaNatural.selectById(contrato.prIdProveedor.prIdPersona);

                    if (contrato.prIdProveedor.prProveedorNatural.prNombre == null)
                    {
                        contrato.prIdProveedor.prTipoEspecial = 1;
                    }
                    else
                    {
                        contrato.prIdProveedor.prTipoEspecial = 0;
                    }

                    AdministradorEdificios admin = HelperAdministrador.selectById(contrato.prAdministrador.prIdAdministrador);
                    //per.prIdPersona = contrato.prIdEmpleado.prIdVendedor;
                    ViewBag.empleado = admin;
                    ViewBag.mensaje = "Se modifico correctamente el Contrato ";
                    ViewBag.returnURL = "/ContratoMantenimiento/";
                    return View("~/Views/Shared/Exito.cshtml");
                }
                else
                {                    
                    Edificio edif = HelperEdificio.selectByIdAll(contrato.prEdificio.prIdEdificio);
                    ViewBag.nombre = edif.prNombre;
                    ViewBag.fechaFirma = contrato.prFechaFirma.ToShortDateString();
                    ViewBag.fechaInicio = contrato.prFechaInicio.ToShortDateString();
                    ViewBag.fechaFin = contrato.prFechaFin.ToShortDateString();
                    ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                    contrato.prIdProveedor = HelperProveedor.selectById(contrato.prIdProveedor.prIdProveedor);
                    contrato.prIdProveedor.prProveedorJuridico = HelperPersonaJuridica.selectById(contrato.prIdProveedor.prIdPersona);
                    contrato.prIdProveedor.prProveedorNatural = HelperPersonaNatural.selectById(contrato.prIdProveedor.prIdPersona);

                    if (contrato.prIdProveedor.prProveedorNatural.prNombre == null)
                    {
                        contrato.prIdProveedor.prTipoEspecial = 1;
                    }
                    else
                    {
                        contrato.prIdProveedor.prTipoEspecial = 0;
                    }

                    AdministradorEdificios admin = HelperAdministrador.selectById(contrato.prAdministrador.prIdAdministrador);
                    //per.prIdPersona = contrato.prIdEmpleado.prIdVendedor;
                    ViewBag.empleado = admin;

                    return View(contrato);
                 
                }
            }
            catch
            {
                Logger.Current.Error("Hubo un error al updatear los contratos");
                return View("~/Views/Shared/Error.cshtml");
            }

        }


		
		public ActionResult Eliminar(int? id)
        {
            

                if (defaultAction != null) return defaultAction;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);//administrador=0, general=1

                ViewBag.permiso = permiso;
                try
                {
                IList listaEdificios = HelperEdificio.selectAll();
                ViewBag.lista = listaEdificios;

                if (!id.HasValue) return HttpNotFound("Esta pagina no existe");//se llamo sin parametro deberia devolver error

                ContratoMantenimiento contrato = HelperContratoMantenimiento.selectById(id.Value);
                if (contrato == null) return HttpNotFound("No existe el contrato con el codigo " + id.Value);//si el edificio no se encontro//tambien deberia devolver error


                Edificio edif = HelperEdificio.selectByIdAll(contrato.prEdificio.prIdEdificio);
                ViewBag.nombre = edif.prNombre;
                ViewBag.fechaFirma = contrato.prFechaFirma.ToShortDateString();
                ViewBag.fechaInicio = contrato.prFechaInicio.ToShortDateString();
                ViewBag.fechaFin = contrato.prFechaFin.ToShortDateString();
                ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                contrato.prIdProveedor = HelperProveedor.selectById(contrato.prIdProveedor.prIdProveedor);
                contrato.prIdProveedor.prProveedorJuridico = HelperPersonaJuridica.selectById(contrato.prIdProveedor.prIdPersona);
                contrato.prIdProveedor.prProveedorNatural = HelperPersonaNatural.selectById(contrato.prIdProveedor.prIdPersona);

                if (contrato.prIdProveedor.prProveedorNatural.prNombre == null)
                {
                    contrato.prIdProveedor.prTipoEspecial = 1;
                }
                else
                {
                    contrato.prIdProveedor.prTipoEspecial = 0;
                }

                AdministradorEdificios admin = HelperAdministrador.selectById(contrato.prAdministrador.prIdAdministrador);
                //per.prIdPersona = contrato.prIdEmpleado.prIdVendedor;
                ViewBag.empleado = admin;
                ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                return View(contrato);
            }
            catch
            {
                Logger.Current.Error("Hubo un error al eliminar los contratos");
                return View("~/Views/Shared/Error.cshtml");
            }

        }

        [HttpPost]
        public ActionResult Eliminar(ContratoMantenimiento contrato)
        {
            
                if (defaultAction != null) return defaultAction;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);//administrador=0, general=1

                ViewBag.permiso = permiso;
                try
                {
                IList listaEdificios = HelperEdificio.selectAll();
                ViewBag.lista = listaEdificios;
                ModelState.Remove("prEdificio.prDireccion");
                ModelState.Remove("prEdificio.prNombre");
                ModelState.Remove("prEdificio.prNroPisos");
                ModelState.Remove("prEdificio.prArea");
                ModelState.Remove("prEdificio.prNroDepartamentos");
                ModelState.Remove("prEdificio.prMonto");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prSexo");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prCodigoDocumento");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prNombre");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prApellidoPaterno");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prApellidoMaterno");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prFechaNacimiento");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prDireccion");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prEmail");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prTelefono");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prTipoDocumento");
                ModelState.Remove("prIdProveedor.prProveedorNatural.prRuc");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prDireccion");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prEmail");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prTelefono");
                ModelState.Remove("prIdProveedor.prProveedorJuridico.prRuc");
                ModelState.Remove("prIdProveedor.prTelefono");
                ModelState.Remove("prIdProveedor.prDireccion");
                ModelState.Remove("prAdministrador.prSexo");
                ModelState.Remove("prAdministrador.prCodigoDocumento");
                ModelState.Remove("prAdministrador.prNombre");
                ModelState.Remove("prAdministrador.prApellidoPaterno");
                ModelState.Remove("prAdministrador.prApellidoMaterno");
                ModelState.Remove("prAdministrador.prFechaNacimiento");
                ModelState.Remove("prAdministrador.prDireccion");
                ModelState.Remove("prAdministrador.prEmail");
                ModelState.Remove("prAdministrador.prTelefono");
                ModelState.Remove("prAdministrador.prTipoDocumento");
                ModelState.Remove("prAdministrador.prPorcentajeBase");

                if (ModelState.IsValid)
                {
                    HelperContratoMantenimiento.delete(contrato);
                    Edificio edif = HelperEdificio.selectByIdAll(contrato.prEdificio.prIdEdificio);
                    ViewBag.nombre = edif.prNombre;
                    ViewBag.fechaFirma = contrato.prFechaFirma.ToShortDateString();
                    ViewBag.fechaInicio = contrato.prFechaInicio.ToShortDateString();
                    ViewBag.fechaFin = contrato.prFechaFin.ToShortDateString();
                    ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;
                    contrato.prIdProveedor = HelperProveedor.selectById(contrato.prIdProveedor.prIdProveedor);
                    contrato.prIdProveedor.prProveedorJuridico = HelperPersonaJuridica.selectById(contrato.prIdProveedor.prIdPersona);
                    contrato.prIdProveedor.prProveedorNatural = HelperPersonaNatural.selectById(contrato.prIdProveedor.prIdPersona);

                    if (contrato.prIdProveedor.prProveedorNatural.prNombre == null)
                    {
                        contrato.prIdProveedor.prTipoEspecial = 1;
                    }
                    else
                    {
                        contrato.prIdProveedor.prTipoEspecial = 0;
                    }

                    AdministradorEdificios admin = HelperAdministrador.selectById(contrato.prAdministrador.prIdAdministrador);
                    //per.prIdPersona = contrato.prIdEmpleado.prIdVendedor;
                    ViewBag.empleado = admin;
                    ViewBag.mensaje = "Se elimino correctamente el Contrato ";
                    ViewBag.returnURL = "/ContratoMantenimiento/";
                    return View("~/Views/Shared/Exito.cshtml");
                }
                ViewBag.tipo = contrato.prTipoContrato.prIdTipoContrato;

                return View(contrato);
            }
            catch
            {
                Logger.Current.Error("Hubo un error al eliminar los contratos");
                return View("~/Views/Shared/Error.cshtml");
            }
        }		
		
		
		public ActionResult Buscar()
        {
            try
            {
                IList listaEdificio = HelperEdificio.selectAll();
                ViewBag.lista = listaEdificio;
                List<PersonaNatural> persona = new List<PersonaNatural>();
                IList proveedores = HelperProveedor.selectAllActivo();
                IList listaEmpleado = HelperVendedor.selectAll();                
                List<Proveedor> provFinal = new List<Proveedor>();


                if (proveedores != null)
                {
                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorNatural = HelperPersonaNatural.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorNatural.prNombre != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 0;
                            provFinal.Add(prov);
                        }
                    }

                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorJuridico = HelperPersonaJuridica.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorJuridico.prRazonSocial != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 1;
                            provFinal.Add(prov);
                        }
                    }
                }


                if (listaEmpleado != null)
                {

                    for (int i = 0; i < listaEmpleado.Count; i++)
                    {
                        Vendedor vend = (Vendedor)(listaEmpleado[i]);
                        PersonaNatural per = HelperPersonaNatural.selectById(HelperVendedor.IdPersona(vend.prIdVendedor));
                        per.prIdPersona = vend.prIdVendedor;
                        persona.Add(per);
                    }
                }

                ViewBag.lista = listaEdificio;
                ViewBag.listaEmpleado = listaEmpleado;
                ViewBag.listaPersona = persona;
                ViewBag.listaProveedor = provFinal;                
                ViewBag.tipo = 0;

            }
            catch
            {
                return View("~/Views/Shared/Error.cshtml");
            }
			ViewBag.tipo=0;
            return View();
        }		
		
		public ActionResult Resultado(BusquedaContratoMantenimiento contratoBuscar)
        {          
            
            try
            {
                ViewBag.ListaContratos = HelperContratoMantenimiento.buscar(contratoBuscar);
            }
            catch
            {

                return View("~/Views/Shared/Error.cshtml");
            }
            ViewBag.tipo = 0;
            return View();
        }

        public ActionResult Index(BusquedaContratoMantenimiento contratoBuscar)
        {
            int numActivos = 0;
            contratoBuscar.prIdTipo = 3;
            
                if (defaultAction != null) return defaultAction;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);
                
                numActivos = HelperContratoMantenimiento.selectCountActivos();

                ViewBag.permiso = permiso;
                try//dentro del try va todo lo que tenga que ver con los helpers que es lo que puede producir la exception
                {
                if (permiso == 3) {
                    IList listaEdificio = null;
                    ViewBag.ListaContratos = HelperContratoMantenimiento.buscar(contratoBuscar);
                    listaEdificio = HelperEdificio.selectAll();
                    ViewBag.lista = listaEdificio;
                }
                if (permiso == 2) {
                    List<Edificio> listEdificio = new List<Edificio>();
                    contratoBuscar.prIdEmpleado= HelperAdministrador.selectByIdPersona(cuenta).prIdAdministrador;
                    ViewBag.ListaContratos = HelperContratoMantenimiento.buscar(contratoBuscar);
                    Edificio edificio = HelperEdificio.selectByIdAll(HelperAdministrador.EdificioAdministradoSelect(contratoBuscar.prIdEmpleado));
                    listEdificio.Add(edificio);
                    ViewBag.lista = listEdificio;
                }
                //ViewBag.ListaContratos = HelperContratoMantenimiento.selectAllActivo();
                
                
                List<PersonaNatural> persona = new List<PersonaNatural>();
                IList proveedores = HelperProveedor.selectAllActivo();
                IList listaAdministrador = HelperAdministrador.selectAll();
                List<Proveedor> provFinal = new List<Proveedor>();


                if (proveedores != null)
                {
                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorNatural = HelperPersonaNatural.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorNatural.prNombre != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 0;
                            provFinal.Add(prov);
                        }
                    }

                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorJuridico = HelperPersonaJuridica.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorJuridico.prRazonSocial != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 1;
                            provFinal.Add(prov);
                        }
                    }
                }


                if (listaAdministrador != null)
                {

                    for (int i = 0; i < listaAdministrador.Count; i++)
                    {
                        AdministradorEdificios admin = (AdministradorEdificios)(listaAdministrador[i]);
                        PersonaNatural per = HelperPersonaNatural.selectById(HelperAdministrador.IdPersona(admin.prIdAdministrador));
                        //per.prIdPersona = admin.prIdVendedor;
                        persona.Add(per);
                    }
                }

                //ViewBag.lista = listaEdificio;
                ViewBag.listaEmpleado = listaAdministrador;
                ViewBag.listaPersona = persona;
                ViewBag.listaProveedor = provFinal;              

            }
            catch
            {
                return View("~/Views/Shared/Error.cshtml");
            }

                ViewBag.prevPage = contratoBuscar.prPage - 1;
                ViewBag.nextPage = contratoBuscar.prPage + 1;
                ViewBag.numPages = numActivos / contratoBuscar.prPageSize;
                if ((numActivos % contratoBuscar.prPageSize) > 0) ViewBag.numPages++;

                return View(contratoBuscar);
        
        }

        
        
        public ActionResult EligeContratoPrev(BusquedaContratoMantenimiento contratoBuscar)
        {

            
                if (defaultAction != null) return defaultAction;
                
                int numActivos = 0;
                contratoBuscar.prIdTipo = 0;
                contratoBuscar.prFechaInicioMax = DateTime.Today;

                int cuenta = AccountController.getIdPersona(HttpContext);

                int permiso = AccountController.getIdPerfil(HttpContext);

                ViewBag.permiso = permiso;

                try
                {
                numActivos = HelperContratoMantenimiento.selectCountActivos();
                //IList listaEdificio = null;

                
                
                if (permiso == 3)
                {
                    IList listaEdificio = null;
                    ViewBag.ListaContratos = HelperContratoMantenimiento.buscar(contratoBuscar);
                    listaEdificio = HelperEdificio.selectAll();
                    ViewBag.lista = listaEdificio;
                }
                if (permiso == 2)
                {
                    List<Edificio> listEdificio = new List<Edificio>();
                    contratoBuscar.prIdEmpleado = HelperAdministrador.selectByIdPersona(cuenta).prIdAdministrador;
                    ViewBag.ListaContratos = HelperContratoMantenimiento.buscar(contratoBuscar);
                    Edificio edificio = HelperEdificio.selectByIdAll(HelperAdministrador.EdificioAdministradoSelect(contratoBuscar.prIdEmpleado));
                    listEdificio.Add(edificio);
                    ViewBag.lista = listEdificio;
                }

                //ViewBag.lista = listaEdificio;
                List<PersonaNatural> persona = new List<PersonaNatural>();
                IList proveedores = HelperProveedor.selectAllActivo();
                IList listaAdministrador = HelperAdministrador.selectAll(); 
                List<Proveedor> provFinal = new List<Proveedor>();


                if (proveedores != null)
                {
                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorNatural = HelperPersonaNatural.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorNatural.prNombre != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 0;
                            provFinal.Add(prov);
                        }
                    }

                    for (int i = 0; i < proveedores.Count; i++)
                    {
                        Proveedor prov = new Proveedor();
                        prov.prProveedorJuridico = HelperPersonaJuridica.selectById(((Proveedor)(proveedores[i])).prIdPersona);
                        if (prov.prProveedorJuridico.prRazonSocial != null)
                        {
                            prov.prIdProveedor = ((Proveedor)(proveedores[i])).prIdProveedor;
                            prov.prTipoEspecial = 1;
                            provFinal.Add(prov);
                        }
                    }
                }


                if (listaAdministrador != null)
                {

                    for (int i = 0; i < listaAdministrador.Count; i++)
                    {
                        AdministradorEdificios admin = (AdministradorEdificios)(listaAdministrador[i]);
                        PersonaNatural per = HelperPersonaNatural.selectById(HelperAdministrador.IdPersona(admin.prIdAdministrador));
                        //per.prIdPersona = admin.prIdVendedor;
                        persona.Add(per);
                    }
                }

                //ViewBag.lista = listaEdificio;
                ViewBag.listaEmpleado = listaAdministrador;
                ViewBag.listaPersona = persona;
                ViewBag.listaProveedor = provFinal;                


                ViewBag.fechaInicio = DateTime.Today.ToShortDateString();

            }
            catch
            {

                return View("~/Views/Shared/Error.cshtml");
            }
            return View(contratoBuscar);
        }

    }
    

}